import axios from 'axios';
import { useAuthStore } from '@/stores/auth';
import router from '@/router/index.js';
import { ElMessage } from 'element-plus';

const httpInstance = axios.create({
    baseURL: 'http://localhost:8080/',
    timeout: 5000,
    withCredentials: true // 开启凭证携带
})

// 拦截器
// 请求拦截器
httpInstance.interceptors.request.use(
    config => {
        const userStore = useAuthStore();
        if (userStore.token) {
            config.headers.Authorization = `Bearer ${userStore.token}`;
        }
        return config;
    }, 
    e => Promise.reject(e)
)

// 响应拦截器
httpInstance.interceptors.response.use(
    res => {
        // 成功（code=1）
        if (res.data.code === 1) {
            return res.data;
        } else {
            // 未登录（code=-1）
            if (res.data.code === -1) {
              const userStore = useAuthStore();
              userStore.logout();
              router.push('/user/login');
              ElMessage.error(res.data.msg || '未登录，请重新登录');
            }
            // 权限不足（code=-2）
            else if (res.data.code === -2) {
                ElMessage.error(res.data.msg || '权限不足，无法访问');
                router.go(-1);
            }
            // 普通错误（code=0）
            else {
                ElMessage.error(res.data.msg || '操作失败');
            }
            return Promise.reject(res);
        }
    }, 
    e => {
        ElMessage.error('网络异常，请稍后重试');
        return Promise.reject(e)
    }
)


export default httpInstance